package main

import (
	"fmt"
	"kaoqin/person"
)

type Item struct {
	Name  string
	Price float32
}

var items = []Item{
	{"超大份榴莲披萨", 89},
	{"炸鸡全家桶", 196},
	{"牛气冲天堡", 59},
}

func main() {
	fmt.Println("欢迎使用 购物助手")
	fmt.Println("请先登录")

	var currentPerson person.Person
	if ok := currentPerson.Login(); !ok {
		fmt.Println("登录失败")
		return
	}
	// 登录成功
	fmt.Println("欢迎你，", currentPerson.Name)

	var mokuai int
	var qianbao float32 = 0 // 初始化钱包余额

	for {
		fmt.Println("请选择你要做的事，1，充值，2，加入购物车，3，下单,4,退出登录")
		if _, err := fmt.Scanln(&mokuai); err != nil {
			fmt.Println("输入错误，请重新输入")
			continue
		}
		if mokuai < 1 || mokuai > 4 {
			fmt.Println("无效选项，请重新选择")
			continue
		}
		break // 合法选项退出循环
	}

	switch mokuai {
	case 1:
		chongzhi(&qianbao) // 充值
	case 2:
		fmt.Println("你选的是 加入购物车")
		// 加入购物车的逻辑
		fmt.Println("商品已添加到购物车")
	case 3:
		for {
			if xiaodan(&qianbao) {
				break // 如果下单成功，退出循环
			}
			// 余额不足，进行充值
			fmt.Println("余额不足，请进行充值")
			chongzhi(&qianbao) // 充值
		}
	case 4:
		fmt.Println("退出登录")
		return
	default:
		fmt.Println("无效选项")
	}
}

func chongzhi(qianbao *float32) {
	fmt.Println("请输入充值额度")
	var input float32
	if _, err := fmt.Scanln(&input); err != nil || input <= 0 {
		fmt.Println("充值额度无效，请输入正数")
		return
	}
	*qianbao += input
	fmt.Println("充值成功，现在的额度是:", *qianbao)
}

func xiaodan(qianbao *float32) bool {
	fmt.Println("你选的是 下单")
	displayItems() // 显示商品列表
	var itemIndex int
	fmt.Println("请输入你要购买的商品编号:")
	if _, err := fmt.Scanln(&itemIndex); err != nil || itemIndex < 1 || itemIndex > len(items) {
		fmt.Println("输入错误，请输入有效的商品编号")
		return false
	}

	orderAmount := items[itemIndex-1].Price // 获取所选商品的价格
	fmt.Printf("你选择的商品是: %s，价格为: %.2f\n", items[itemIndex-1].Name, orderAmount)

	if orderAmount > *qianbao {
		fmt.Println("余额不足，请先充值")
		return false
	}

	*qianbao -= orderAmount
	fmt.Printf("下单成功，扣款金额: %.2f ，当前余额: %.2f\n", orderAmount, *qianbao)
	return true
}

func displayItems() {
	fmt.Println("可购买的商品列表:")
	for i, item := range items {
		fmt.Printf("%d. %s - %.2f\n", i+1, item.Name, item.Price)
	}
}